package com.huo.common;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * <p>Title: 执行WINDOWS操作系统命令行</p>
 * <p>Description: </p>
 * @author Huoyan
 * @version 1.0
 * 2013-4-4
 */
public class Cmd {
	
	public static String getProperty(String key){
		return System.getProperty(key);
	}
	
	/**
	 * 执行WINDOWS操作系统命令行命令
	 * @param cmd
	 */
	public static String exec(String cmd) {
		return exec(cmd, false);
	}
	/**
	 * 执行WINDOWS操作系统命令行命令
	 * @param cmd
	 */
	public static String exec(String cmd, boolean isDebug) {
		Runtime run = getRuntime();// 返回与当前 Java 应用程序相关的运行时对象
		String cmdstr = "";
		try {
			Process p = run.exec(cmd);// 启动另一个进程来执行命令
			BufferedInputStream in = new BufferedInputStream(p.getInputStream());
			//System.getProperties().list(System.out);//输出系统信息列表
			//System.getProperty("file.encoding");//获得系统编码与文件自身编码格式有关
			//System.getProperty("sun.jnu.encoding");//获得系统编码与文件名有关
			BufferedReader inBr = new BufferedReader(new InputStreamReader(in, System.getProperty("sun.jnu.encoding")));
			String lineStr;
			while ((lineStr = inBr.readLine()) != null){
				// 获得命令执行后在控制台的输出信息
				if(isDebug)
					System.out.println(lineStr);
				cmdstr += lineStr + "\r\n";
			}
			// 检查命令是否执行失败。
			if (p.waitFor() != 0) {
				if (p.exitValue() == 1)// p.exitValue()==0表示正常结束，1：非正常结束
					if(isDebug)
						System.err.println("命令执行失败!");
			}
			inBr.close();
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cmdstr;
	}
	
	/**
	 * 获得Java运行时
	 * @return
	 */
	public static Runtime getRuntime(){
		return Runtime.getRuntime();
	}
}
